#include "common.h"

int fd = -1;      // 屏幕文件的描述符
int *plcd = NULL; // 帧缓冲的首地址

// lcd屏幕的初始化
void lcd_init()
{
    // 打开屏幕
    int fd = open("/dev/fb0", O_RDWR);
    if (fd == -1)
    {
        perror("open /dev/fb0 error "); // 打印错误信息
        return ;
    }
    // 内存映射
    plcd = mmap(NULL, 4 * 800 * 480, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    // return plcd == MAP_FAILED;
}

// 关闭屏幕
void lcd_close()
{
    // 解除映射
    if (munmap(plcd, 4 * 480 * 800) == -1)
        perror("munmap");
    // 关闭屏幕
    close(fd);
}

// 画点
void display_point(int x, int y, int color)
{
    if (x >= 0 && x < 800 && y >= 0 && y < 480)
    {
        *(plcd + y * 800 + x) = color;
    }
    
}

// 显示一张纯色的图片（清屏）
void show_a_color(int color)
{
    int i, j;
    for (i = 0; i < 800; i++)
    {
        for (j = 0; j < 480; j++)
        {
            //*(plcd + i * 800 + j) = color;
            display_point(i, j, color);
        }
    }
}

void display_rect(int x1, int x2, int y1, int y2, int color)
{
    int i, j;
    for (i = x1; i < x2; i++)
        for (j = y1; j < y2; j++)
            display_point(i, j, color);
}

void display_round(int x, int y, int r,int color)
{
    for(int i = 0;i<480;i++)
    {
        for(int j = 0;j<800;j++)
        {
            if(fabs((i-x)*(i-x)+(j-y)*(j-y) - r*r) <= (double)(r / 80)) display_point(j,i, color);
        }

    }
    
}